﻿using System;
using System.Collections.Generic;

namespace Tipler.Siniflar
{
    [Serializable]
    public class FonksiyonSonuc<T> : MarshalByRefObject, IDisposable
    {
        private bool _DisposedValue;
        // To detect redundant calls


        private List<HataDetay> _HataDetaylari;

        public bool HataVarMi
        {
            get { return (HataKod.Length > 0) || (!string.IsNullOrEmpty(Hata)); }
        }


        public string Hata { get; set; }

        public string HataKod { get; set; }

        public T Sonuc { get; set; }

        public Exception Ex
        {
            set { ExMesaji = value.ToString(); }
        }

        public string ExMesaji { get; set; }

        public FonksiyonSonuc()
        {
            HataKod = "";
        }

        public void HataDetayEkle(string TabloAdiDegeri, object idDegeri)
        {
            if ((_HataDetaylari == null))
            {
                _HataDetaylari = new List<HataDetay>();
            }
            _HataDetaylari.Add(new HataDetay(TabloAdiDegeri, idDegeri));
        }

        public List<HataDetay> HataDetaylari
        {
            get { return _HataDetaylari; }
        }

        public FonksiyonSonuc(T sonucDegeri)
        {
            HataKod = "";
            Sonuc = sonucDegeri;
        }

        public FonksiyonSonuc(string hataDegeri, string hataKodu)
        {
            Hata = hataDegeri;
            HataKod = hataKodu;
        }

        public FonksiyonSonuc(string hataDegeri, string hataKodu, Exception exDegeri)
        {
            Hata = hataDegeri;
            HataKod = hataKodu;
            ExMesaji = exDegeri.ToString();
        }


        protected virtual void Dispose(bool disposing)
        {
            if (_DisposedValue) return;


            if (disposing)
            {
                ExMesaji = null;
                Hata = null;
                HataKod = null;
                _HataDetaylari = null;
            }
            //this._Sonuc = null;
            _DisposedValue = true;
        }

        public void Dispose()
        {
            Dispose(true);
            GC.SuppressFinalize(this);
        }

    }
}
